package edu.northwestern.cbits.purple_robot_manager.logging; import java.util.Map; import android.content.Context; import android.content.SharedPreferences; import android.net.Uri; import android.preference.PreferenceManager; import android.util.Log; import edu.northwestern.cbits.anthracite.Logger; import edu.northwestern.cbits.purple_robot_manager.EncryptionManager; public class LogManager { public static final String ENABLED = "config_enable_log_server"; private static final boolean ENABLED_DEFAULT = false; public static final String URI = "config_log_server_uri"; private static final String URI_DEFAULT = null; public static final String INCLUDE_LOCATION = "config_log_location"; private static final boolean INCLUDE_LOCATION_DEFAULT = false; public static final String UPLOAD_INTERVAL = "config_log_upload_interval"; private static final long UPLOAD_INTERVAL_DEFAULT = 300000; public static final String WIFI_ONLY = "config_restrict_log_wifi"; private static final boolean WIFI_ONLY_DEFAULT = true; public static final String LIBERAL_SSL = "config_http_liberal_ssl"; private static final boolean LIBERAL_SSL_DEFAULT = false; public static final String HEARTBEAT = "config_log_heartbeat"; private static final boolean HEARTBEAT_DEFAULT = false; private static final String CHARGING_ONLY = "config_restrict_log_charging"; private static final boolean CHARGING_ONLY_DEFAULT = false; private static LogManager _sharedInstance = null; private Logger _logger = null; public LogManager(Context context) { String userHash = EncryptionManager.getInstance().getUserHash(context); this._logger = Logger.getInstance(context, userHash); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); this._logger.setDebug(false); this._logger.setEnabled(prefs.getBoolean(LogManager.ENABLED, LogManager.ENABLED_DEFAULT)); this._logger.setHeartbeat(prefs.getBoolean(LogManager.HEARTBEAT, LogManager.HEARTBEAT_DEFAULT)); this._logger.setIncludeLocation(prefs.getBoolean(LogManager.INCLUDE_LOCATION, LogManager.INCLUDE_LOCATION_DEFAULT)); this._logger.setWifiOnly(prefs.getBoolean(LogManager.WIFI_ONLY, LogManager.WIFI_ONLY_DEFAULT)); this._logger.setLiberalSsl(prefs.getBoolean(LogManager.LIBERAL_SSL, LogManager.LIBERAL_SSL_DEFAULT)); this._logger.setChargingOnly(prefs.getBoolean(LogManager.CHARGING_ONLY, LogManager.CHARGING_ONLY_DEFAULT)); try { this._logger.setUploadUri(Uri.parse(prefs.getString(LogManager.URI, LogManager.URI_DEFAULT))); } catch (RuntimeException e) { e.printStackTrace(); } try { this._logger.setUploadInterval(prefs.getLong(LogManager.UPLOAD_INTERVAL, LogManager.UPLOAD_INTERVAL_DEFAULT)); } catch (ClassCastException e) { this._logger.setUploadInterval(Long.parseLong(prefs.getString(LogManager.UPLOAD_INTERVAL, "" + LogManager.UPLOAD_INTERVAL_DEFAULT))); } } public String getLogUrl(Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); return prefs.getString(LogManager.URI, LogManager.URI_DEFAULT); } public static LogManager getInstance(Context context) { if (LogManager._sharedInstance != null) return LogManager._sharedInstance; if (context != null) LogManager._sharedInstance = new LogManager(context.getApplicationContext()); LogManager._sharedInstance.log("pr_log_manager_initialized", null); return LogManager._sharedInstance; } public boolean log(String event, Map<String, Object> payload) { return this._logger.log(event, payload); } public void logException(Throwable e) { this._logger.logException(e); } public void upload() { Log.e("PR", "----- ATTEMPT LOG UPLOADS ------"); this._logger.attemptUploads(true); } public void setEndpoint(String endpoint) { this._logger.setUploadUri(Uri.parse(endpoint)); } public String getEndpoint() { Uri u = this._logger.getUploadUri(); if (u != null) return u.toString(); return null; } public boolean getEnabled() { return this._logger.getEnabled(); } public void setEnabled(boolean enabled) { this._logger.setEnabled(enabled); } public void setIncludeLocation(boolean include) { this._logger.setIncludeLocation(include); } public void setUploadInterval(long interval) { this._logger.setUploadInterval(interval); } public void setWifiOnly(boolean wifiOnly) { this._logger.setWifiOnly(wifiOnly); } public void setLiberalSsl(boolean liberal) { this._logger.setLiberalSsl(liberal); } public void setHeartbeat(boolean heartbeat) { this._logger.setHeartbeat(heartbeat); } public int pendingEventsCount() { return this._logger.pendingEventsCount(); } }